package org.example.diet_compass.uitls;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Date;

public class JwtUtil {

    private static final long EXPIRATION_TIME = 86400000; // 24 小时
    private static final SecretKey SECRET_KEY = Keys.secretKeyFor(io.jsonwebtoken.SignatureAlgorithm.HS256); // 生成安全的密钥

    /**
     * 生成 JWT Token
     *
     * @param userId 用户ID
     * @return Token 字符串
     */
    public static String generateToken(String userId) {
        return Jwts.builder()
                .subject(userId) // 设置主题（通常是用户ID）
                .issuedAt(new Date()) // 设置签发时间
                .expiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间
                .signWith(SECRET_KEY) // 使用密钥签名
                .compact(); // 生成 Token
    }

    /**
     * 解析 JWT Token
     *
     * @param token Token 字符串
     * @return 用户ID
     */
    public static String parseToken(String token) {
        Claims claims = Jwts.parser()
                .verifyWith(SECRET_KEY) // 设置签名密钥
                .build()
                .parseSignedClaims(token) // 解析 Token
                .getPayload(); // 获取 Payload

        return claims.getSubject(); // 返回用户ID
    }

    public static void main(String[] args) {
        // 生成 Token
        String token = generateToken("1");
        System.out.println("Generated Token: " + token);

        // 解析 Token
        String userId = parseToken(token);
        System.out.println("Parsed User ID: " + userId);
    }
}